package com.cardone.common;

import lombok.NonNull;

/**
 * 常量
 * 
 * @author yaoht
 * 
 */
public enum Constants {
	/**
	 * 分隔符
	 */
	compart(":"),

	/**
	 * 米, 公尺, 计, 表, 仪表
	 */
	meter("*");

	/**
	 * string值
	 */
	private String stringValue;

	/**
	 * 值
	 */
	private Object value;

	/**
	 * 构建
	 */
	private Constants() {
		this.stringValue = this.name();
	}

	/**
	 * 构建
	 * 
	 * @param value
	 *            值
	 */
	private Constants(Object value) {
		this.value = value;
	}

	/**
	 * 构建
	 * 
	 * @param stringValue
	 *            string值
	 */
	private Constants(String stringValue) {
		this.stringValue = stringValue;
	}

	/**
	 * 获取string值
	 * 
	 * @return string值
	 */
	public String stringValue() {
		if (this.stringValue == null) {
			if (this.value == null) {
				return this.name();
			}

			if (this.value instanceof String) {
				return this.value(String.class);
			}
		}

		return this.stringValue;
	}

	/**
	 * 获取T值
	 * 
	 * @param requiredType
	 *            T类型
	 * @return T值
	 */
	@SuppressWarnings("unchecked")
	public <T> T value(@NonNull Class<T> requiredType) {
		if (requiredType.isInstance(this.value)) {
			return (T) this.value;
		}

		return null;
	}
}
